
// 封装基于ts的栈结构

// 基于第一次封装  给数据加上泛型

class ArrayStack2 <T> {
    // 定义一个 私有 属性的数组
    private data: T[] = []

    // 添加到栈顶
    // push方法 将一个元素压入栈中
    push(element:T) : void{
        this.data.push(element)
    }

    // 移除栈顶
    // pop方法将栈顶元素移除出栈
    pop(): T | undefined {
        return this.data.pop()
    }

    // 返回栈顶元素 栈顶就是最后添加到数组的元素
    peek():T | undefined {
        return this.data[this.data.length - 1]
    }

    // 判断是否为空
    isEmpty():boolean{
      return this.data.length === 0
    }

    // 返回栈结构的元素个数
    size():number{
        return this.data.length
    }

}

// 创建类的实例  并且指定添加的类型
const stack2 = new ArrayStack2<string>()

stack2.push('aa')
stack2.push('bb')
stack2.push('cc')
stack2.push('dd')
// stack2.push(222)
console.log(stack2.peek());
console.log(stack2.pop());
console.log(stack2.size());
console.log(stack2.isEmpty());



